﻿/*
密钥解密 
Time Limit:1000MS  Memory Limit:32768K


Description:
密钥解密是在同一密钥加密的基础上进行解密，也可以看作是加密的反操作。
解密是将密文的对应位循环减去密钥数字串值，使得密文变形显露为明文。

例如，用同一密钥”4972863”对密文：

xql"zkvyu "wl#7)hpl&5$rz"vuw$A

进行解密即得到明文：

the result of 3 and 2 is not 8

密钥解密也是循环解密，并且在ASCII码值32(’ ’)到122(’z’)之间做模运算，
小于32的值，便依次跳跃到122,121,...等值。
例如，32-7其值已不足32的7个位置，它应该跳到122-6＝116即’t’上。


Input:
输入数据中含有若干组数据，每组数据由密钥和密文组成，密钥和密文均单独占一行。
每组数据之间没有空行。 
Output:
对于每个数据组，对应输出一行明文。 
Sample Input:
4972863
xql"zkvyu "wl#7)hpl"5$rx"vuw$A
123
Igomq#Xqumf
Sample Output:
the result of 3 and 2 is not 8
Hello World
*/
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
	for (string cipher, key; getline(cin, key) && getline(cin, cipher);)
	{
	
		string::size_type  cipher_len=cipher.length(), key_len=key.length();
		string decypher;
		decypher.reserve(cipher_len);
		for (string::size_type i=0, k=0;
			i<cipher_len; i++, k++)
		{
			if(k==key_len)
				k=0;
			//char code=32+(cipher[i]-key[k]-32)%90;
			char code=cipher[i]-key[k]+'0';
			
			if(code<32)
				code+=91;
			decypher+=code;
		}
		cout<<decypher<<endl;	
	}
	return EXIT_SUCCESS;
}